# -*- coding:utf-8 -*-
# 作者：梦
# 版本：1.0
import threading
import time
import keyboard
import win32api
import win32con
from pynput.keyboard import Controller
from tkinter import *
from tkinter.ttk import *
from tkinter import messagebox

# 全局变量
a = str('f')  # 定义初始功能按键
b = '自动拾取'  # 定义初始功能
window = Tk()  # 创建窗口


# 函数区


def mouse_pick():  # 自动拾取函数
    keyboard1 = Controller()  # 创建键盘控制器
    keyboard1.press('f')  # 按下f
    keyboard1.release('f')  # 松开f
    win32api.mouse_event(win32con.MOUSEEVENTF_WHEEL, 0, 0, -200)  # 模拟鼠标滚轮向下滑动
    time.sleep(0.017)  # 延时0.017毫秒
    keyboard1.press('f')  # 同上
    keyboard1.release('f')  # 同上
    win32api.mouse_event(win32con.MOUSEEVENTF_WHEEL, 0, 0, 150)  # 模拟鼠标滚轮向上滑动
    time.sleep(0.017)  # 同上
    keyboard1.press('f')  # 同上
    keyboard1.release('f')  # 同上


def Automatic_roller():  # 自动滑轮函数
    win32api.mouse_event(win32con.MOUSEEVENTF_WHEEL, 0, 0, -100)  # 模拟鼠标滚轮向下滑动
    time.sleep(0.01)  # 延时0.017毫秒
    win32api.mouse_event(win32con.MOUSEEVENTF_WHEEL, 0, 0, -100)  # 模拟鼠标滚轮向下滑动
    time.sleep(0.01)  # 延时0.017毫秒
    win32api.mouse_event(win32con.MOUSEEVENTF_WHEEL, 0, 0, 100)  # 模拟鼠标滚轮向上滑动
    time.sleep(0.01)  # 延时0.017毫秒
    win32api.mouse_event(win32con.MOUSEEVENTF_WHEEL, 0, 0, 100)  # 模拟鼠标滚轮向上滑动


def Hand_roller():  # 手动滑轮函数
    keyboard1 = Controller()  # 创建键盘控制器
    keyboard1.press('f')  # 按下f
    keyboard1.release('f')  # 松开f
    time.sleep(0.015)  # 延时0.015毫秒


def start():
    if b == '自动拾取':  # 判断功能是否是'自动拾取'
        window.iconify()  # 最小化窗口
        win32api.mouse_event(win32con.MOUSEEVENTF_WHEEL, 0, 0, -5000)  # 模拟鼠标滚轮向下滑动
        keyboard.add_hotkey(a, mouse_pick)  # 添加键盘热键监听
        keyboard.wait('esc')  # 监听结束按键'esc'
        keyboard.wait('`')  # 监听结束按键'`'
        exit()  # 退出程序
    elif b == '自动滚轮':  # 判断功能是否是'自动滚轮'
        window.iconify()  # 最小化窗口
        win32api.mouse_event(win32con.MOUSEEVENTF_WHEEL, 0, 0, -5000)  # 模拟鼠标滚轮向下滑动
        keyboard.add_hotkey(a, Automatic_roller)  # 添加键盘热键监听
        keyboard.wait('esc')  # 监听结束按键'esc'
        keyboard.wait('`')  # 监听结束按键'`'
        exit()  # 退出程序
    elif b == '手动滚轮':  # 判断功能是否是'手动滚轮'
        window.iconify()  # 最小化窗口
        keyboard.add_hotkey(a, Hand_roller)  # 添加键盘热键监听
        keyboard.wait('esc')  # 监听结束按键'esc'
        keyboard.wait('`')  # 监听结束按键'`'
        exit()  # 退出程序


def th():
    key_thurunt = threading.Thread(target=start, name='T1')  # 添加线程
    key_thurunt.start()  # 运行线程


def main():
    window.title("原神拾取 1.0")  # 设置窗口标题
    window.geometry("470x220")  # 设置窗口分辨率
    # 新建标签一并定位
    lbl = Label(window, text="请输入游戏闲置按钮(单字符)作为功能", font=("Arial Bold", 12)).grid(column=0, row=0, sticky=E)
    # 新建标签二并定位
    lbl1 = Label(window, text="启动后未响应为正常情况，可正常使用,\r按ESC再按下面的`可关闭功能", font=("Arial Bold", 12)).grid(column=0, row=5)
    # 设置一个跟踪的变量（自我理解）
    text = StringVar()
    text.set('默认为【f】')  # 设置变量的内容
    txt = Entry(window, textvariable=text, width=10)  # 新建输入框
    txt.grid(column=0, row=1, ipady=6)  # 定位输入框
    txt.focus()  # 设置输入框焦点

    def click1():  # 新建按钮函数
        global a  # 调用全局函数（个人理解）
        a = str(txt.get())  # 获取输入框内容
        messagebox.showinfo("提示框", '当前功能键为[{}]'.format(a))  # 消息框

    # 设置按钮1并定位
    btn = Button(window, text='确定', width=12, command=click1).grid(column=1, row=1, ipadx=10, ipady=10)
    # 新建组合框
    combo = Combobox(window, width=7)
    # 添加选项
    combo['values'] = ('自动拾取', '自动滚轮', '手动滚轮')
    # 设置默认选项
    combo.current(0)
    # 定位组合框
    combo.grid(column=0, row=3)

    def click2():  # 新建按钮函数
        global b  # 调用全局函数（个人理解）
        b = combo.get()  # 获取组合框选项
        if b == '自动拾取':  # 判断组合框选项是否是'自动拾取'
            messagebox.showinfo('提示栏', '你选择了自动拾取')  # 消息框
        elif b == '手动滚轮':  # 判断组合框选项是否是'手动滚轮'
            messagebox.showinfo('提示栏', '你选择了手动滚轮')  # 消息框
        elif b == '自动滚轮':  # 判断组合框选项是否是'自动滚轮'
            messagebox.showinfo('提示栏', '你选择了自动滚轮')  # 消息框

    # 按钮2
    btn1 = Button(window, text='确定', width=12, command=click2).grid(column=1, row=3, ipadx=10, ipady=10)
    # 按钮3
    btn2 = Button(window, text='启动', command=start).grid(column=0, row=4, columnspan=4, ipadx=15, ipady=15)
    # 新建标签2定位并靠右
    lbl1 = Label(window, text='---不改不用按---', font=("Arial Bold", 10)).grid(row=0, column=0, rowspan=3,
                                                                           sticky=E)
    # 新建标签3定位并靠右
    lbl2 = Label(window, text='默认自动拾取', font=("Arial Bold", 10)).grid(row=1, column=0, rowspan=4,
                                                                      sticky=E)
    # 新建标签4定位并靠右
    lbl3 = Label(window, text='全部默认直接点启动', font=("Arial Bold", 10)).grid(row=2, column=1, rowspan=4,
                                                                         sticky=E)
    # 显示窗口
    window.mainloop()


if __name__ == '__main__':
    main()
